package com.ling.pl.security.service;

import com.ling.pl.core.commons.support.DaoPage;
import com.ling.pl.core.commons.utils.BatchUtils;
import com.ling.pl.core.commons.utils.reflect.ReflectUtils;
import com.ling.pl.core.dao.IDao;
import com.ling.pl.core.service.impl.BaseService;
import com.ling.pl.security.dao.DefaultPositionDao;
import com.ling.pl.security.model.DefaultPosition;
import com.ling.pl.security.model.DefaultPositionVO;

import javax.annotation.Resource;
import java.util.*;

/**
 * @author bo.wang
 */
public class BaseDefaultPositionService extends BaseService {

    public static final String BEAN_ID = "defaultPositionService";

	@Resource
	DefaultPositionDao defaultPositionDao;

	public IDao getDao() {
		return defaultPositionDao;
	}

    public List<DefaultPositionVO> convertDefaultPositionToVO(List<DefaultPosition> models) {
        List<DefaultPositionVO> result = new ArrayList<DefaultPositionVO>();
        for (DefaultPosition initiation : models) {
            DefaultPositionVO inparam = convertDefaultPositionToVO(initiation);
			result.add(inparam);
		}
		return result;
	}

    public DefaultPositionVO convertDefaultPositionToVO(DefaultPosition model) {
        DefaultPositionVO inparam = new DefaultPositionVO();
		ReflectUtils.copyProperties(model, inparam);
		return inparam;
	}

    public DefaultPosition convertDefaultPositionVOTo(DefaultPositionVO vo) {
        DefaultPosition entity = new DefaultPosition();
		ReflectUtils.copyProperties(vo, entity);
		return entity;
	}

    public List<DefaultPosition> convertDefaultPositionVOTo(List<DefaultPositionVO> vos) {
        List<DefaultPosition> result = new ArrayList<DefaultPosition>();
        for (DefaultPositionVO vo : vos) {
            DefaultPosition entity = convertDefaultPositionVOTo(vo);
            result.add(entity);
        }
        return result;
    }

	public DaoPage findDefaultPositionVOByParams(Map params, Integer pageIndex,
                                                 Integer pageSize) {
        if (params == null) {
            params = new HashMap();
        }
        DaoPage daoPage = defaultPositionDao.findDefaultPositionByParams(params, pageIndex, pageSize);
		daoPage.setResult(convertDefaultPositionToVO((List<DefaultPosition>) daoPage.getResult()));
		return daoPage;
	}

	public List<DefaultPositionVO> findDefaultPositionVOByParams(Map params) {
        if (params == null) {
            params = new HashMap();
        }
        List<DefaultPosition> temp = defaultPositionDao.findDefaultPositionByParams(params);
		return convertDefaultPositionToVO(temp);
	}

    public DaoPage findDefaultPositionByParams(Map params, Integer pageIndex,
                                               Integer pageSize) {
        if (params == null) {
            params = new HashMap();
        }
        DaoPage daoPage = defaultPositionDao.findDefaultPositionByParams(params, pageIndex, pageSize);
        return daoPage;
    }

    public List<DefaultPosition> findDefaultPositionByParams(Map params) {
        if (params == null) {
            params = new HashMap();
        }
        List<DefaultPosition> temp = defaultPositionDao.findDefaultPositionByParams(params);
        return temp;
    }


    public void saveDefaultPositionDataListsMap(Map<String, List<DefaultPositionVO>> dataListsMap) {
		Collection<DefaultPositionVO> deleteList = BatchUtils.to(DefaultPositionVO.class).getDeleteEntities(dataListsMap);
        Collection<DefaultPositionVO> insertList = BatchUtils.to(DefaultPositionVO.class).getInsertEntities(dataListsMap);
        Collection<DefaultPositionVO> updateList = BatchUtils.to(DefaultPositionVO.class).getModifiedEntities(dataListsMap);
        if (updateList != null && updateList.size() > 0) {
            for (DefaultPositionVO vo : updateList) {
                DefaultPosition entity = convertDefaultPositionVOTo(vo);
				defaultPositionDao.update(entity);
			}
//			defaultPositionDao.updateAll(updateList);
		}
        if (insertList != null && insertList.size() > 0) {
            for (DefaultPositionVO vo : insertList) {
                DefaultPosition entity = convertDefaultPositionVOTo(vo);
				defaultPositionDao.save(entity);
				vo.setId(entity.getId());
			}
//			defaultPositionDao.saveAll(insertList);
		}
        if (deleteList != null && deleteList.size() > 0) {
            for (DefaultPositionVO vo : deleteList) {
                DefaultPosition entity = new DefaultPosition();
				entity.setId(vo.getId());
				defaultPositionDao.remove(entity);
			}
//			defaultPositionDao.removeAll(deleteList);
		}

	}
}

